#ifndef __PVMDRIVER_MARMALADE_S3ESOUND_H__
#define __PVMDRIVER_MARMALADE_S3ESOUND_H__

#include "lib/drivers/pvmdriver_softmix.h"
#include <list>

class PVMDevices3eSound;

class PVMDrivers3eSound : public IPVMDriverOutSimpleDevice
{
public:
	PVMDrivers3eSound();
	virtual ~PVMDrivers3eSound();

	virtual pvm_bool Init();
	virtual void DriverClose();
	virtual pvm_bool IsInitialized();
	virtual pvm_uint32 GetDriverType();

	virtual pvm_bool GetDriverOption(const pvm_char* optionName, void* optionVal, pvm_uint32* optionSize);
	virtual pvm_bool SetDriverOption(const pvm_char* optionName, void* optionVal, pvm_uint32 optionSize);

	virtual pvm_uint32 DevicesNum();
	virtual pvm_int32 DeviceName(pvm_int32 nDevice, pvm_char* buffer, pvm_uint32 maxLength);

	virtual pvm_bool DeviceEnumModes(pvm_int32 nDeivce, TFormatEnumCallbackProc enumProc, void *param);

	virtual IPVMDeviceOutSimple* DeviceOpen(pvm_uint32 samplesPerSec, pvm_uint32 bitsPerSample, pvm_uint32 chanelsNum, pvm_int32 deviceNum, void *additionalInfo, pvm_uint32 infoSize, IPVMDeviceOutSimpleWaveSource *waveSource, pvm_bool deviceSuspended);
	virtual void CloseDevice(IPVMDeviceBase *device);
	virtual void OnIdle();
protected:
	std::list<PVMDevices3eSound*> devices;
};

IPVMDriverOut* PVMDriverCreates3eSound();
pvm_uint32 PVMDriverGetTypeAndFlagss3eSound();

#endif
